package Leetcode.ArrayAndLinkedList.PlusOne66;

/**
 * 给定一个由整数组成的非空数组所表示的非负整数，在该数的基础上加一。
 * 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
 * 你可以假设除了整数 0 之外，这个整数不会以零开头。
 *
 * 输入: [1,2,3]
 * 输出: [1,2,4]
 * 解释: 输入数组表示数字 123。
 *
 * 该方法独立想出来的 但是代码较为繁琐
 *
 * 次数 2
 */
public class Solution {
    public int[] plusOne(int[] digits) {
        if(digits == null) {
            return null;
        }
        int index = digits.length - 1;
        if(digits[index] < 9) {
            digits[index]++;
            return digits;
        }
       digits =  plus(digits,index);
        return digits;
    }

    public int[] plus(int[] nums,int index) {
        if(index == 0) {
            if(++nums[index] == 10) {
                nums[index] = 0;
                int[] result = new int[nums.length + 1];
                result[0] = 1;
                int j = result.length - 1;
                for(int i = nums.length - 1; i >= 0; i--) {
                    result[j--] = nums[i];
                }
                return result;
            }
            if(nums[index] <= 9) {
                return nums;
            }
        }
        nums[index]++;
        if(nums[index] == 10) {
            nums[index] = 0;
           nums = plus(nums,--index);
        }

        return nums;
    }

    public static void main(String[] args) {
        int[] nums= {8,9,9,9};
        Solution solution = new Solution();
        int[] result = solution.plusOne(nums);
        for(int i : result) {
            System.out.print(i);
        }
    }
}
